<html>
 <head>
  <meta charset="UTF-8">
 </head>
 <body>
  <h1 data-lake-id="y9RDq" id="y9RDq"><span data-lake-id="u7063bc3c" id="u7063bc3c">典型回答</span></h1>
  <p data-lake-id="u02e69927" id="u02e69927"><br></p>
  <p data-lake-id="u20f3e293" id="u20f3e293"><span data-lake-id="u56684234" id="u56684234">可以使用两个栈来实现一个队列，一个栈用来存储入队的元素，另一个栈用来存储出队的元素。</span></p>
  <p data-lake-id="u13c0a63d" id="u13c0a63d"><span data-lake-id="u477304d3" id="u477304d3">​</span><br></p>
  <p data-lake-id="u79c23fbc" id="u79c23fbc"><span data-lake-id="u3ac61f3e" id="u3ac61f3e">入队时，直接将元素压入入队栈中。出队时，如果出队栈为空，则将入队栈中的所有元素弹出并压入出队栈中，然后从出队栈中弹出元素；否则直接从出队栈中弹出元素。</span></p>
  <p data-lake-id="ud8cf9b4e" id="ud8cf9b4e"><span data-lake-id="u7b0a8cf9" id="u7b0a8cf9">​</span><br></p>
  <p data-lake-id="u6003fd11" id="u6003fd11"><span data-lake-id="u9cb4cf32" id="u9cb4cf32">这样可以保证出队栈中的元素顺序和队列中的元素顺序相同。</span></p>
  <p data-lake-id="ucd07ed0b" id="ucd07ed0b"><span data-lake-id="ub085b22f" id="ub085b22f">​</span><br></p>
  <pre lang="java"><code>
import java.util.Stack;

public class MyQueue&lt;T&gt; {
    private Stack&lt;T&gt; stackIn;
    private Stack&lt;T&gt; stackOut;

    public MyQueue() {
        stackIn = new Stack&lt;&gt;();
        stackOut = new Stack&lt;&gt;();
    }

    public void enqueue(T element) {
        stackIn.push(element);
    }

    public T dequeue() {
        if (stackOut.isEmpty()) {
            while (!stackIn.isEmpty()) {
                stackOut.push(stackIn.pop());
            }
        }
        return stackOut.pop();
    }

    public boolean isEmpty() {
        return stackIn.isEmpty() &amp;&amp; stackOut.isEmpty();
    }
}

</code></pre>
  <p data-lake-id="u57ccc43b" id="u57ccc43b"><br></p>
  <p data-lake-id="u28569a4d" id="u28569a4d"><span data-lake-id="u65a7c031" id="u65a7c031">其中，enqueue方法用来入队，直接将元素压入stackIn栈中。</span></p>
  <p data-lake-id="u174021e4" id="u174021e4"><span data-lake-id="u1ff5d3a1" id="u1ff5d3a1">​</span><br></p>
  <p data-lake-id="u664f85c7" id="u664f85c7"><span data-lake-id="u7bec481f" id="u7bec481f">dequeue方法用来出队，如果stackOut栈为空，则先将stackIn栈中的元素倒入stackOut栈中，再从stackOut栈中弹出元素，即为队头元素。</span></p>
  <p data-lake-id="ufe291ac2" id="ufe291ac2"><span data-lake-id="uf7b60d00" id="uf7b60d00">​</span><br></p>
  <p data-lake-id="ubb503084" id="ubb503084"><span data-lake-id="u343cb047" id="u343cb047">isEmpty方法用来判断队列是否为空，如果stackIn和stackOut都为空，则队列为空。</span></p>
  <p data-lake-id="u7912ed6e" id="u7912ed6e"><span data-lake-id="u745fa9b3" id="u745fa9b3">​</span><br></p>
  <p data-lake-id="ue5fe2b12" id="ue5fe2b12"><span data-lake-id="u3fc68302" id="u3fc68302">这个实现的时间复杂度为O(1)，空间复杂度为O(n)，其中n为队列中元素的个数。</span></p>
 </body>
</html>